home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 41 / CD Expert nº 41.iso / Tux / tux.exe / tuxracer-win32-0.60 / tux.tcl < prev    next >
Text File  |  2000-10-01  |  14KB  |  546 lines

  1. # -----------------------------------------------------------------------
  2. # Globals
  3. # -----------------------------------------------------------------------
  4. set xlation_node :t1
  5. set rotation_node :t1
  6. set root :t1
  7.  
  8. tux_root_node $root
  9.  
  10. #
  11. # Material Properties
  12. #
  13.  
  14. tux_material white_penguin \
  15.             {0.58 0.58 0.58 } {0.2 0.2 0.2} 50.0
  16. tux_material black_penguin {0.1 0.1 0.1} {0.5 0.5 0.5} 20.0
  17. tux_material beak_colour \
  18.             {0.64 0.54 0.06} {0.4 0.4 0.4} 5
  19. tux_material nostril_colour \
  20.             {0.48039 0.318627 0.033725} {0.0 0.0 0.0} 1
  21. tux_material iris_colour {0.01 0.01 0.01} {0.4 0.4 0.4} 90.0
  22.  
  23.  
  24. #
  25. # Define the geometry
  26. #
  27.  
  28. # Helper function to make torso parts
  29. proc makeBody { parent } {
  30.     set torso_bl "$parent:b"
  31.     tux_sphere $parent b 1.0
  32.     tux_surfaceproperty $torso_bl black_penguin
  33.     tux_scale $torso_bl {0 0 0} { 0.95 1.0 0.8 }
  34.  
  35.     set torso_wh1 $parent:w1
  36.     tux_sphere $parent w1 1.0
  37.     tux_surfaceproperty $torso_wh1 white_penguin
  38.     tux_translate $torso_wh1 { 0.0 0 0.17 }
  39.     tux_scale $torso_wh1 {0 0 0} {0.8 0.9 0.7}
  40.     tux_shadow $torso_wh1 off
  41.  
  42.     #set torso_wh1 $parent:w1
  43.     #tux_sphere $parent w1
  44.     #tux_surfaceproperty $torso_wh1 white_penguin
  45.     #tux_translate $torso_wh1 { -0.04 0 0.14 }
  46.     #tux_scale $torso_wh1 {0 0 0} {0.8 0.9 0.7}
  47.     #tux_shadow $torso_wh1 off
  48.  
  49.     #set torso_wh2 $parent:w2
  50.     #tux_sphere $parent w2
  51.     #tux_surfaceproperty $torso_wh2 white_penguin
  52.     #tux_translate $torso_wh2 { 0.04 0 0.14 }
  53.     #tux_scale $torso_wh2 {0 0 0} {0.8 0.9 0.7}
  54.     #tux_shadow $torso_wh2 off
  55.  
  56.  
  57. tux_transform : t1
  58. set root :t1
  59. set xlation_node :t1
  60.  
  61. tux_transform :t1 r1
  62. set rotation_node :t1:r1
  63. tux_scale $rotation_node {0 0 0} { 0.35 0.35 0.35 }
  64.  
  65. #
  66. # Create torso
  67. #
  68.  
  69. tux_transform $rotation_node tors_scl
  70. set torso_scl "$rotation_node:tors_scl"
  71. tux_scale $torso_scl {0 0 0} { 0.90 0.9 0.9 }
  72.  
  73. makeBody $torso_scl
  74.  
  75. #
  76. # Create shoulders
  77. #
  78.  
  79. tux_transform $rotation_node t2
  80. set shoulder_xlate "$rotation_node:t2"
  81. #tux_rotate $shoulder_xlate x 10
  82. #tux_translate $shoulder_xlate { 0 0.4 0.0 }
  83. tux_translate $shoulder_xlate { 0 0.4 0.05 }
  84.  
  85. tux_transform $shoulder_xlate scl
  86. set shoulder_scale "$shoulder_xlate:scl"
  87. tux_scale $shoulder_scale {0 0 0} { 0.72 0.72 0.72 }
  88.  
  89. makeBody $shoulder_scale
  90.  
  91. #
  92. # Create neck
  93. #
  94.  
  95. tux_transform $rotation_node t3
  96. set neck_xlate "$rotation_node:t3"
  97. tux_translate $neck_xlate { 0 0.9 0.07 }
  98. tux_rotate $neck_xlate y +90
  99.  
  100. tux_transform $neck_xlate neckjt       ;# neck joint
  101. set neck_joint "$neck_xlate:neckjt"
  102. tux_neck $neck_joint
  103.  
  104. tux_transform $neck_joint t4
  105. set neck_org "$neck_joint:t4"
  106. tux_rotate $neck_org y -90
  107. # leave rotation point at origin
  108.  
  109. tux_transform $neck_org scl
  110. set neck_scale "$neck_org:scl"
  111. tux_scale $neck_scale {0 0 0} { 0.45 0.5 0.45 }
  112.  
  113. tux_sphere $neck_scale neck 0.8
  114. set neck "$neck_scale:neck"
  115. tux_surfaceproperty $neck black_penguin
  116.  
  117. tux_sphere $neck_scale neckw 0.66
  118. set neckw "$neck_scale:neckw"
  119. tux_surfaceproperty $neckw white_penguin
  120. tux_translate $neckw {0 -0.08 0.35 }
  121. tux_scale $neckw {0 0 0} {0.8 0.9 0.7}
  122. tux_shadow $neckw off
  123.  
  124. #
  125. # Create head
  126. #
  127.  
  128. tux_transform $neck_org t5
  129. set head_xlate "$neck_org:t5"
  130. tux_translate $head_xlate { 0 0.3 0.07 }
  131. tux_rotate $head_xlate y +90
  132.  
  133. tux_transform $head_xlate hdjtrot
  134. set head_joint_rot "$head_xlate:hdjtrot"        ;# head joint for rotation
  135.  
  136. tux_transform $head_joint_rot hdjt
  137. set head_joint "$head_joint_rot:hdjt"           ;# head joint
  138. tux_head $head_joint
  139.  
  140. tux_transform $head_joint hdorg
  141. set head_org "$head_joint:hdorg"
  142. tux_rotate $head_org y -90
  143. tux_translate $head_org {0 0.20 0}
  144.  
  145. tux_sphere $head_org hd 1.0
  146. set head "$head_org:hd"
  147. tux_surfaceproperty $head black_penguin
  148. tux_scale $head {0 0 0} {0.42 0.5 0.42}
  149.  
  150. #
  151. # Create beak
  152. #
  153.  
  154. tux_sphere $head_org bk1 0.8
  155. set beak1 "$head_org:bk1"
  156. tux_surfaceproperty $beak1 beak_colour
  157. tux_translate $beak1 { 0 -0.205 0.3 }
  158. tux_rotate $beak1 x +10
  159. tux_scale $beak1 {0 0 0} { 0.23 0.12 0.4 }
  160.  
  161. #tux_sphere $head_org bk2
  162. #set beak2 "$head_org:bk2"
  163. #tux_surfaceproperty $beak2 beak_colour
  164. #tux_translate $beak2 { 0 -0.195 0.3 }
  165. #tux_rotate $beak2 x +10
  166. #tux_scale $beak2 {0 0 0} { 0.19 0.15 0.32 }
  167. #tux_shadow $beak2 off
  168.  
  169. tux_sphere $head_org bk3 0.66
  170. set beak3 "$head_org:bk3"
  171. tux_surfaceproperty $beak3 beak_colour
  172. tux_translate $beak3 { 0 -0.23 0.3 }
  173. tux_rotate $beak3 x +10
  174. tux_scale $beak3 {0 0 0} { 0.21 0.17 0.38 }
  175. tux_shadow $beak3 off
  176.  
  177. #
  178. # Create eyes
  179. #
  180.  
  181. tux_sphere $head_org le 0.66
  182. set left_eye "$head_org:le"
  183. tux_surfaceproperty $left_eye white_penguin
  184. tux_translate $left_eye {0.13 -0.03 0.38}
  185. tux_rotate $left_eye y 18
  186. tux_rotate $left_eye z 5
  187. tux_rotate $left_eye x 5
  188. tux_scale $left_eye {0 0 0} {0.1 0.13 0.03}
  189. tux_shadow $left_eye off
  190.  
  191. tux_sphere $head_org re 0.66
  192. set right_eye "$head_org:re"
  193. tux_surfaceproperty $right_eye white_penguin
  194. tux_translate $right_eye {-0.13 -0.03 0.38}
  195. tux_rotate $right_eye y -18
  196. tux_rotate $right_eye z -5
  197. tux_rotate $right_eye x 5
  198. tux_scale $right_eye {0 0 0} {0.1 0.13 0.03}
  199. tux_shadow $right_eye off
  200.  
  201. tux_sphere $head_org li 0.66
  202. set left_iris "$head_org:li"
  203. tux_surfaceproperty $left_iris iris_colour
  204. tux_translate $left_iris {0.12 -0.045 0.40}
  205. tux_rotate $left_iris y 18
  206. tux_rotate $left_iris z 5
  207. tux_rotate $left_iris x 5
  208. tux_scale $left_iris {0 0 0} {0.055 0.07 0.03}
  209. tux_shadow $left_iris off
  210. tux_eye $left_iris left
  211.  
  212. tux_sphere $head_org ri 0.66
  213. set right_iris "$head_org:ri"
  214. tux_surfaceproperty $right_iris iris_colour
  215. tux_translate $right_iris {-0.12 -0.045 0.40}
  216. tux_rotate $right_iris y -18
  217. tux_rotate $right_iris z -5
  218. tux_rotate $right_iris x 5
  219. tux_scale $right_iris {0 0 0} {0.055 0.07 0.03}
  220. tux_shadow $right_iris off
  221. tux_eye $right_iris right
  222.  
  223. #
  224. # Create Upper Arm
  225. #
  226.  
  227. # left
  228. tux_transform $shoulder_xlate luarmxlate
  229. set luparm_xlate "$shoulder_xlate:luarmxlate"
  230. tux_rotate $luparm_xlate y 180
  231. tux_translate $luparm_xlate {-0.56 0.3 0}
  232. tux_rotate $luparm_xlate z +45
  233. tux_rotate $luparm_xlate x +90
  234.  
  235. tux_transform $luparm_xlate lshjt
  236. set lshoulder_joint "$luparm_xlate:lshjt"       ;# left shoulder joint
  237. tux_left_shoulder $lshoulder_joint
  238.  
  239. tux_transform $lshoulder_joint luarmorg
  240. set luparm_org "$lshoulder_joint:luarmorg"
  241. tux_rotate $luparm_org x -90
  242. tux_translate $luparm_org {-0.22 0 0}
  243.  
  244. tux_sphere $luparm_org uparm 0.66
  245. set luparm "$luparm_org:uparm"
  246. tux_surfaceproperty $luparm black_penguin
  247. tux_scale $luparm {0 0 0} {0.34 0.1 0.2}
  248.  
  249. #right
  250. tux_transform $shoulder_xlate ruarmxlate
  251. set ruparm_xlate "$shoulder_xlate:ruarmxlate"
  252. tux_translate $ruparm_xlate {-0.56 0.3 0}
  253. tux_rotate $ruparm_xlate z +45
  254. tux_rotate $ruparm_xlate x -90
  255.  
  256. tux_transform $ruparm_xlate rshjt                ;# right shoulder joint
  257. set rshoulder_joint "$ruparm_xlate:rshjt"
  258. tux_right_shoulder $rshoulder_joint
  259.  
  260. tux_transform $rshoulder_joint ruarmorg
  261. set ruparm_org "$rshoulder_joint:ruarmorg"
  262. tux_rotate $ruparm_org x +90
  263. tux_translate $ruparm_org {-0.22 0 0}
  264.  
  265. tux_sphere $ruparm_org uparm 0.66
  266. set ruparm "$ruparm_org:uparm"
  267. tux_surfaceproperty $ruparm black_penguin
  268. tux_scale $ruparm {0 0 0} {0.34 0.1 0.2}
  269.  
  270. #
  271. # Create forearm
  272. #
  273.  
  274. # left
  275. tux_transform $luparm_org llarmxlate
  276. set llowarm_xlate "$luparm_org:llarmxlate"
  277. tux_translate $llowarm_xlate {-0.23 0 0}
  278. tux_rotate $llowarm_xlate z 20
  279. tux_rotate $llowarm_xlate x +90
  280.  
  281. tux_transform $llowarm_xlate lelbjt
  282. set lelbow_joint "$llowarm_xlate:lelbjt"        ;# left elbow joint
  283.  
  284. tux_transform $lelbow_joint llarmorg
  285. set llowarm_org "$lelbow_joint:llarmorg"
  286. tux_rotate $llowarm_org x -90
  287. tux_translate $llowarm_org {-0.19 0 0}
  288.  
  289. tux_sphere $llowarm_org llowarm 0.66
  290. set llowarm "$llowarm_org:llowarm"
  291. tux_surfaceproperty $llowarm black_penguin
  292. tux_scale $llowarm {0 0 0} {0.30 0.07 0.15}
  293.  
  294. # right
  295. tux_transform $ruparm_org rlarmxlate
  296. set rlowarm_xlate "$ruparm_org:rlarmxlate"
  297. tux_translate $rlowarm_xlate {-0.23 0 0}
  298. tux_rotate $rlowarm_xlate z 20
  299. tux_rotate $rlowarm_xlate x -90
  300.  
  301. tux_transform $rlowarm_xlate relbjt              ;# right elbow joint
  302. set relbow_joint "$rlowarm_xlate:relbjt"
  303.  
  304. tux_transform $relbow_joint rlarmorg
  305. set rlowarm_org "$relbow_joint:rlarmorg"
  306. tux_rotate $rlowarm_org x +90
  307. tux_translate $rlowarm_org {-0.19 0 0}
  308.  
  309. tux_sphere $rlowarm_org rlowarm 0.66
  310. set rlowarm "$rlowarm_org:rlowarm"
  311. tux_surfaceproperty $rlowarm black_penguin
  312. tux_scale $rlowarm {0 0 0} {0.30 0.07 0.15}
  313.  
  314. #
  315. # Create hands
  316. #
  317.  
  318. # left
  319. tux_transform $llowarm_org lhandxlate
  320. set lhand_xlate "$llowarm_org:lhandxlate"
  321. tux_translate $lhand_xlate {-0.24 0 0}
  322. tux_rotate $lhand_xlate z 20
  323. tux_rotate $lhand_xlate x +90
  324.  
  325. tux_transform $lhand_xlate lwrtjt
  326. set lwrist_joint "$lhand_xlate:lwrtjt"          ;# left wrist joint
  327.  
  328. tux_transform $lwrist_joint lhndorg
  329. set lhand_org "$lwrist_joint:lhndorg"
  330. tux_rotate $lhand_org x -90
  331. tux_translate $lhand_org {-0.10 0 0}
  332.  
  333. tux_sphere $lhand_org lhand 0.5
  334. set lhand "$lhand_org:lhand"
  335. tux_surfaceproperty $lhand black_penguin
  336. tux_scale $lhand {0 0 0} {0.12 0.05 0.12}
  337.  
  338. # right
  339. tux_transform $rlowarm_org rhandxlate
  340. set rhand_xlate "$rlowarm_org:rhandxlate"
  341. tux_translate $rhand_xlate {-0.24 0 0}
  342. tux_rotate $rhand_xlate z 20
  343. tux_rotate $rhand_xlate x -90
  344.  
  345. tux_transform $rhand_xlate rwrtjt
  346. set rwrist_joint "$rhand_xlate:rwrtjt"          ;# right wrist joint
  347.  
  348. tux_transform $rwrist_joint rhndorg
  349. set rhand_org "$rwrist_joint:rhndorg"
  350. tux_rotate $rhand_org x +90
  351. tux_translate $rhand_org {-0.10 0 0}
  352.  
  353. tux_sphere $rhand_org rhand 0.5
  354. set rhand "$rhand_org:rhand"
  355. tux_surfaceproperty $rhand black_penguin
  356. tux_scale $rhand {0 0 0} {0.12 0.05 0.12}
  357.  
  358. #
  359. # Make thighs
  360.  
  361. #left
  362. tux_transform $rotation_node lthgxlate
  363. set lthigh_xlate "$rotation_node:lthgxlate"
  364. tux_rotate $lthigh_xlate y +180
  365. tux_translate $lthigh_xlate {-0.28 -0.8 0}
  366. tux_rotate $lthigh_xlate y +110
  367.  
  368. tux_transform $lthigh_xlate lhipjt               ;# left hip joint
  369. set lhip_joint "$lthigh_xlate:lhipjt"
  370. tux_left_hip $lhip_joint
  371.  
  372. tux_transform $lhip_joint lthgorg
  373. set lthigh_org "$lhip_joint:lthgorg"
  374. tux_rotate $lthigh_org y -110
  375. tux_translate $lthigh_org { 0 -0.1 0 } 
  376.  
  377. tux_sphere $lthigh_org lthigh 0.5
  378. set lthigh "$lthigh_org:lthigh"
  379. tux_surfaceproperty $lthigh beak_colour
  380. tux_scale $lthigh {0 0 0} {0.07 0.30 0.07}
  381.  
  382. tux_sphere $lthigh_org lhipball 0.5
  383. set lhipball "$lthigh_org:lhipball"
  384. tux_surfaceproperty $lhipball black_penguin
  385. tux_translate $lhipball {0.0 0.05 0.0}
  386. tux_scale $lhipball {0 0 0} {0.09 0.18 0.09}
  387. tux_shadow $lhipball off
  388.  
  389. #right
  390. tux_transform $rotation_node rthgxlate
  391. set rthigh_xlate "$rotation_node:rthgxlate"
  392. tux_translate $rthigh_xlate {-0.28 -0.8 0}
  393. tux_rotate $rthigh_xlate y -110
  394.  
  395. tux_transform $rthigh_xlate rhipjt               ;# right hip joint
  396. set rhip_joint "$rthigh_xlate:rhipjt"
  397. tux_right_hip $rhip_joint
  398.  
  399. tux_transform $rhip_joint rthgorg
  400. set rthigh_org "$rhip_joint:rthgorg"
  401. tux_rotate $rthigh_org y +110
  402. tux_translate $rthigh_org { 0 -0.1 0 } 
  403.  
  404. tux_sphere $rthigh_org rthigh 0.5
  405. set rthigh "$rthigh_org:rthigh"
  406. tux_surfaceproperty $rthigh beak_colour
  407. tux_scale $rthigh {0 0 0} {0.07 0.30 0.07}
  408.  
  409. tux_sphere $rthigh_org rhipball 0.5
  410. set rhipball "$rthigh_org:rhipball"
  411. tux_surfaceproperty $rhipball black_penguin
  412. tux_translate $rhipball {0.0 0.05 0.0}
  413. tux_scale $rhipball {0 0 0} {0.09 0.18 0.09}
  414. tux_shadow $rhipball off
  415.  
  416. #
  417. # Make calves
  418. #
  419.  
  420. #left
  421. tux_transform $lthigh_org lclfxlate
  422. set lcalf_xlate "$lthigh_org:lclfxlate"
  423. tux_translate $lcalf_xlate {0 -0.21 0}
  424. tux_rotate $lcalf_xlate y +90
  425.  
  426. tux_transform $lcalf_xlate lkneejt               ;# left knee joint
  427. set lknee_joint "$lcalf_xlate:lkneejt"      
  428. tux_left_knee $lknee_joint
  429.  
  430. tux_transform $lknee_joint lclforg
  431. set lcalf_org "$lknee_joint:lclforg"
  432. tux_rotate $lcalf_org y -90
  433. tux_translate $lcalf_org { 0 -0.13 0 } 
  434.  
  435. tux_sphere $lcalf_org lcalf 0.5
  436. set lcalf "$lcalf_org:lcalf"
  437. tux_surfaceproperty $lcalf beak_colour
  438. tux_scale $lcalf {0 0 0} {0.06 0.18 0.06}
  439.  
  440. #right
  441. tux_transform $rthigh_org rclfxlate
  442. set rcalf_xlate "$rthigh_org:rclfxlate"
  443. tux_translate $rcalf_xlate {0 -0.21 0}
  444. tux_rotate $rcalf_xlate y -90
  445.  
  446. tux_transform $rcalf_xlate rkneejt               ;# right knee joint
  447. set rknee_joint "$rcalf_xlate:rkneejt"
  448. tux_right_knee $rknee_joint
  449.  
  450. tux_transform $rknee_joint rclforg
  451. set rcalf_org "$rknee_joint:rclforg"
  452. tux_rotate $rcalf_org y +90
  453. tux_translate $rcalf_org { 0 -0.13 0 } 
  454.  
  455. tux_sphere $rcalf_org rcalf 0.5
  456. set rcalf "$rcalf_org:rcalf"
  457. tux_surfaceproperty $rcalf beak_colour
  458. tux_scale $rcalf {0 0 0} {0.06 0.18 0.06}
  459.  
  460.  
  461. #
  462. # Create feet
  463. #
  464.  
  465. # helper function to make feet
  466. proc makeFoot { parent } {
  467.     tux_transform $parent footorg
  468.  
  469.     set foot_org "$parent:footorg"
  470.     tux_translate $foot_org { -0.13 0 0 }
  471.     tux_surfaceproperty $foot_org beak_colour
  472.     tux_scale $foot_org { 0 0 0 } { 1.1 1.0 1.3 }
  473.  
  474.     tux_sphere $foot_org base 0.66
  475.     set foot_base "$foot_org:base"
  476.     tux_scale $foot_base {0 0 0} {0.25 0.08 0.18}
  477.  
  478.     tux_sphere $foot_org toe1 0.66
  479.     set toe1 "$foot_org:toe1"
  480.     tux_surfaceproperty $toe1 beak_colour
  481.     tux_translate $toe1 {-0.07 0 0.1}
  482.     tux_rotate $toe1 y 30
  483.     tux_scale $toe1 {0 0 0} {0.27 0.07 0.11}
  484.  
  485.     tux_sphere $foot_org toe2 0.66
  486.     set toe2 "$foot_org:toe2"
  487.     tux_surfaceproperty $toe2 beak_colour
  488.     tux_translate $toe2 {-0.07 0 -0.1}
  489.     tux_rotate $toe2 y -30
  490.     tux_scale $toe2 {0 0 0} {0.27 0.07 0.11}
  491.  
  492.     tux_sphere $foot_org toe3 0.66
  493.     set toe3 "$foot_org:toe3"
  494.     tux_surfaceproperty $toe3 beak_colour
  495.     tux_translate $toe3 {-0.08 0 0}
  496.     tux_scale $toe3 {0 0 0} {0.27 0.07 0.10}
  497.  
  498. # left foot
  499. tux_transform $lcalf_org lftxlate
  500. set lfoot_xlate "$lcalf_org:lftxlate"
  501. tux_translate $lfoot_xlate { 0 -0.18 0 }
  502. tux_rotate $lfoot_xlate y -50
  503.  
  504. tux_transform $lfoot_xlate lankjt
  505. set lankle_joint "$lfoot_xlate:lankjt"          ;# left ankle joint
  506. tux_left_ankle $lankle_joint
  507.  
  508. makeFoot $lankle_joint
  509.  
  510. # right foot
  511. tux_transform $rcalf_org rftxlate
  512. set rfoot_xlate "$rcalf_org:rftxlate"
  513. tux_translate $rfoot_xlate { 0 -0.18 0 }
  514. tux_rotate $rfoot_xlate y +50
  515.  
  516. tux_transform $rfoot_xlate rankjt
  517. set rankle_joint "$rfoot_xlate:rankjt"          ;# right ankle joint
  518. tux_right_ankle $rankle_joint
  519.  
  520. makeFoot $rankle_joint
  521.  
  522. #
  523. # Create Tail
  524. #
  525. tux_transform $rotation_node tailxlate
  526. set tail_xlate "$rotation_node:tailxlate"
  527. tux_translate $tail_xlate {0 -0.4 -0.5}
  528. tux_rotate $tail_xlate x -60
  529.  
  530. tux_transform $tail_xlate tail_joint
  531. set tail_joint "$tail_xlate:tail_joint"         ;# tail joint
  532. tux_tail $tail_joint
  533.  
  534. tux_transform $tail_joint tail_orig
  535. set tail_orig "$tail_joint:tail_orig"
  536. tux_translate $tail_orig {0 0.15 0}
  537.  
  538. tux_sphere $tail_orig tail 0.5
  539. set tail "$tail_orig:tail"
  540. tux_surfaceproperty $tail black_penguin
  541. tux_scale $tail {0 0 0} {0.2 0.3 0.1}
  542.  
  543.